var express = require('express');
const pro = require('../sql/pro');//引入创建的商品集合模块，并定义一个变量接收暴漏的模块，这个变量就是mondodb中pros在代码中映射的一个对象，增删改查用此对象
const sql = require('../sql/sql');//引入封装的mongodb的增删  改查的命令模块
const uuid = require("node-uuid");
const xlsx = require("node-xlsx");
const { page } = require('../sql/sql');
var router = express.Router();//router是express.Router()创建的的中间件对象，在判定路由时使用

let str = "";
let pageIndex = 0;
let dataNum = 10;//数据条数
let maxPage = 1;


/* GET home page. */
router.get('/', function(req, res, next) {//这里的斜杠是指根路径
  //未分页情况下，进入商品管理系统页面时，先请求数据库所有数据，将数据渲染到商品管理系统的页面模板
  // sql.find(pro).then((data)=>{
  //   res.render('pro', { 
  //     index:1,//这个index是为了渲染管理列表当前项设置的
  //     data
  //    });
  // })
  str = ""//返回商品列表页面时，清除搜索关键字
  //设置分页要用分页查询请求：打开商品管理系统页面时请求默认显示10条显示第一页
  let num = 10;//分页查询中一页显示几条数据
  let index = 0;//分页查询中默认显示第1页

  pageIndex = index;
  dataNum = num;

  //使用封装好的分页查询命令功能，传入参数，得到指定分页数据
  sql.page(pro,{},{},num,index).then((data)=>{//pro是pros在代码中映射的对象

    //获取集合一共有多少条数据
    sql.count(pro).then((maxNum)=>{
      //渲染页面，传入分页数据，并计算总页码
      maxPage = Math.ceil(maxNum/num);
      res.render('pro', { //渲染pro商品管理页面，这里的pro指的是views中的pro的ejs文件
        index:1,//这个index是为了渲染管理列表当前项设置的
        data,//分页查询返回的数据
        maxPage:Math.ceil(maxNum/num),//查询集合数据条数返回的数据
        pageIndex:index,//分页查询中默认显示第1页
        dataNum,//分页查询中一页显示几条数据
        power:req.session.power
       });
    })
  })
});
//添加商品管理模板中跳转单个商品信息页面的路由
router.get('/add', function(req, res, next) {
  res.render('proAdd', { //渲染proAdd添加单个商品的页面
    index:1,
    power:req.session.power
   });
});

//添加单个商品信息页面提交按钮的路由
router.post('/addAction', function(req, res, next) {
  //把获取到的数据保存到obj
  let obj = req.body;//定义变量，接收post发送的数据
  //处理获取的数据(字符转数字，添加商品id)
  obj.proId = "pro" + uuid.v1();
  obj.price = Number(obj.price);//带小数
  obj.stock = parseFloat(obj.stock);//库存
  obj.sales = parseFloat(obj.stock);//销量
  obj.discount = obj.discount*1;//折扣
  obj.score = obj.score*1;//评分
  //把获取的数据存储到数据库，并路由重定向到商品管理的路由
  sql.insert(pro,obj).then(()=>{
    res.redirect("/pro")
  })
});
//添加商品管理页面批量导入功能的路由
router.get('/insertAll', function(req, res, next) {
  //导入表格中数据，并解析，只能导入这一个表，利用了node是第三方模块xlsx
  const data = xlsx.parse("./data/goods.xlsx");//找到相应的需要插入数据的表格
  var arr = [];//定义一个空数组变量，存储表格中所需的数据
  for(let i=1;i<data[0].data.length;i++){
    arr.push({
      proId:"pro"+uuid.v1(),
      proName:data[0].data[i][1],
      column:data[0].data[i][2],
      brand:data[0].data[i][3],
      logo:data[0].data[i][4],
      mainImg:data[0].data[i][5],
      proImg1:data[0].data[i][6],
      proImg2:data[0].data[i][7],
      price:data[0].data[i][8],
      introduce:data[0].data[i][9],
      stock:data[0].data[i][10],
      sales:data[0].data[i][11],
      discount:data[0].data[i][12],
      score:data[0].data[i][13]
    })
  }
  //将解析后的数据(解析后的数据样式为[{},{}.....])插入到数据库中
  sql.insert(pro,arr).then(()=>{
    //导入成功后路由重定向到商品展示的页面
    res.redirect("/pro");
  })
});

//添加商品管理页面删除操作的路由
router.get('/delete', function(req, res, next) {
  const id = req.query.id;//获取需要删除商品的id
  //根据id在数据库中删除该商品的数据
  sql.delete(pro,{proId:id}).then(()=>{
    //删除成功后路由重定向到商品管理的路由
    res.redirect("/pro");
  })
});

//添加商品管理页面修改操作的路由
router.get('/update', function(req, res, next) {
  const id = req.query.id;  //接收需要修改的商品id
  //根据id查询数据库中商品的信息
  sql.find(pro,{proId:id},{_id:0,__v:0}).then((data)=>{
    //渲染修改页面的数据
    res.render("proUpdate",{
      index:1,
      data:data[0],//解析查询返回的数据
      power:req.session.power
    })
  })
});

//添加修改商品信息页面提交的路由
router.post('/updateAction', function(req, res, next) {
 //接收修改后的数据
  const obj = req.body;
  //处理接收到的数据类型
  obj.price = Number(obj.price);//带小数
  obj.stock = parseFloat(obj.stock);//库存
  obj.sales = parseFloat(obj.stock);//销量
  obj.discount = obj.discount*1;//折扣
  obj.score = obj.score*1;//评分

  //根据接收到信息的额id来更新商品数据，并路由重定向到商品管理页面
  sql.update(pro,{proId:obj.proId},obj).then(()=>{
    res.redirect("/pro");
  })
});

//添加商品管理页面的排序路由
router.get('/sort',(req, res, next)=>{
  //接收要排序的字段和方向
  const obj = req.query;
  //查询排序之后的数据，根据排序后的数据 从新渲染商品管理页面
  sql.sort(pro,{},{},obj).then((data)=>{
    res.render("pro",{
      index:1,
      data,
      pageIndex:0,
      dataNum:data.length,
      maxPage:1,
      power:req.session.power
    })
  })
});

//添加商品管理页面的搜索路由
router.post('/search',(req, res, next)=>{
  //接收要搜索的关键字
  const obj = req.body;
  //创建正则，准备给find方法做模糊查询的条件使用
  let reg = new RegExp(obj.search);
  str = obj.search;
  //调用查询方法，设置查询条件为模糊查询
  sql.page(pro,{proName:reg},{},10,0).then((data)=>{
    sql.find(pro,{proName:reg},{}).then((data1)=>{
      //data1是符合条件的所有数据
      maxPage = Math.ceil(data1.length/dataNum);
     //根据搜索之后的数据，重新渲染商品管理页面
      res.render("pro",{
        index:1,
        data,//请求到的分页中dataNum条数据
        pageIndex:0,
        dataNum:10,
        maxPage:Math.ceil(data1.length / 10),
        power:req.session.power
      })
    })
  })
});

//添加商品管理页面跳转分页的路由
router.get('/page',function(req, res, next){
  //解析跳转页面的时传来的数据并设置默认值
  let {index = 0,num = 10}=req.query;//这里的index是get获取的页码索引
  pageIndex = index;
  dataNum = num;
  let reg = new RegExp(str);
  //请求分页数据，注意页面获取数据的类型
  sql.page(pro,{proName:reg},{},num*1,index*1).then((data)=>{
    //获取数据库数据条数
    sql.find(pro,{proName:reg},{}).then((data1)=>{
      //重新渲染商品管理页面
      res.render('pro', { 
        index:1,
        data,
        maxPage:Math.ceil(data1.length/dataNum),
        pageIndex:index,
        dataNum,
        power:req.session.power
       });
    })
  })
});







module.exports = router;
